package com.g2room.io.image;

import java.awt.Image;
//旧的jpeg处理类
//import com.sun.image.codec.jpeg.*; 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
import javax.imageio.stream.ImageOutputStream;
import javax.lang.model.element.Element;

import com.sun.imageio.plugins.jpeg.JPEGImageWriter;
import com.telesound.dataimport.util.MD5Util;

public class CompressImage {

	/**
     * 图片压缩主方法
     * 
     * @param newDir 图片所在的文件夹路径
     * @param file  图片路径
     * @param name  图片名
     * @param w 目标宽
     * @param h 目标高
     * @param JPEGcompression 压缩质量/百分比
     * @author zhouqz
     */
    public static void ImgCompress(File file, String targetDir, float JPEGcompression) {
        if (!(file.exists() && file.canRead())) {
            return ;
        }
        
        try {
            BufferedImage bufferedImage =  ImageIO.read(file);
            FileOutputStream fos = new FileOutputStream(targetDir + file.getName()); // 输出到文件流
              // 新的方法
            int dpi = 300;//分辨率
            saveAsJPEG(dpi, bufferedImage, JPEGcompression, fos);
            //关闭输出流
            fos.close();
            //返回压缩后的图片地址
        } catch (IOException ex) {
        	ex.printStackTrace();
        }
    }

    /**
     * 以JPEG编码保存图片
     * 
     * @param dpi 分辨率
     * @param image_to_save 要处理的图像图片
     * @param JPEGcompression 压缩比
     * @param fos 文件输出流
     * @throws IOException
     */
    public static void saveAsJPEG(Integer dpi, BufferedImage image_to_save,
            float JPEGcompression, FileOutputStream fos) throws IOException {
        // Image writer
        JPEGImageWriter imageWriter = (JPEGImageWriter) ImageIO
                .getImageWritersBySuffix("jpg").next();
        ImageOutputStream ios = ImageIO.createImageOutputStream(fos);
        imageWriter.setOutput(ios);
        // and metadata
        IIOMetadata imageMetaData = imageWriter.getDefaultImageMetadata(
                new ImageTypeSpecifier(image_to_save), null);

         if(dpi != null && !dpi.equals("")){
        
         //new metadata
         Element tree = (Element)
         imageMetaData.getAsTree("javax_imageio_jpeg_image_1.0");
//         Element jfif =
//         (Element)tree.getElementsByTagName("app0JFIF").item(0);
//         jfif.setAttribute("Xdensity", Integer.toString(dpi) );
//         jfif.setAttribute("Ydensity", Integer.toString(dpi));
        
         }

        if (JPEGcompression >= 0 && JPEGcompression <= 1f) {

            // new Compression
            JPEGImageWriteParam jpegParams = (JPEGImageWriteParam) imageWriter .getDefaultWriteParam();
            jpegParams.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
            jpegParams.setCompressionQuality(JPEGcompression);

        }

        // old write and clean
        // jpegEncoder.encode(image_to_save, jpegEncodeParam);

        // new Write and clean up
        imageWriter.write(imageMetaData, new IIOImage(image_to_save, null, null), null);
        ios.close();
        imageWriter.dispose();
    }

    /**
     * 图片压缩测试
     * 
     * @param args
     */
    public static void main(String args[]) {
    	String dir = "F:/资料/项目/驾车技巧/html/images/test/1/";
    	String targetDir = "F:/资料/项目/驾车技巧/html/images/test/2/";
    	File f= new File(dir);
    	for(File file : f.listFiles()) {
    		if(file.isDirectory()) continue;
    		System.out.println(file.getName());
    		 //压缩
//            ImgCompress();
    	}
    }

//    /**
//     * 外部调用方法
//     * @param url
//     * @param w
//     * @param h
//     */
//    public static String ImgCompress(String url, String filePath, int w, int h) {
//            // 压缩质量 百分比
//            float JPEGcompression = 0.7f;
//            // 本地图片存储路径
//            url = "/var" + url;
//            String name = url.substring(url.lastIndexOf("/") + 1);
//            // 截取url中最后一个“/”之后的字符串为name
//            System.out.println("url：===========" + url);
//            System.out.println("name：=========" + name);
//            //压缩主方法
//             return ImgCompress(filePath, url, name, w, h, JPEGcompression);
//        
//    }
}
